#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <string>
#include <signal.h>
#include <functional>
#include <vector>
#include <sys/wait.h>


void handler(int signo)
{
    std::cout << "get a signal: " << signo << std::endl;
    exit(1);
}

int main()
{
    // 信号捕捉：
    // 1. 默认
    // 2. 忽略
    // 3. 自定义
    //::signal(2, handler);// 自定义
    // signal(2, SIG_IGN);// 忽略（不做处理），本身就是一种信号捕捉的方法，动作就是忽略
    signal(2, SIG_DFL);// default：默认

    while(true)
    {
        pause();
    }
}



// int main()
// {
//     if(fork() == 0)
//     {
//         sleep(1);
//         int a = 10;
//         a /= 0;

//         exit(1);
//     }

//     int status = 0;
//     waitpid(-1, &status, 0);

//     printf("exit signal: %d, core dump: %d\n", status&0x7F, (status>>7)&1);
//     return 0;
// }


// 异常
// void handler(int signo)
// {
//     std::cout << "get a signo: " << signo << std::endl;
//     // 我捕捉了 11 号信号，没执行默认动作，也没有退出进程
//     abort();
// }

// int main()
// {
//     // signal(8, handler);
//     // int *p = nullptr;
//     // *p = 100;

//     // signal(8, handler);
//     int a = 10;
//     a /= 0;

//     while(true);
// }
